﻿package Source;

import javax.swing.*;
import java.io.IOException;
import java.util.*;
/*
 * Основной типичный класс задачи
 */
public class Task extends Thread implements java.io.Serializable {
    //поля класса
    private long id;//уникальный идентификатор задачи
    private String title;//!!!!!!!!!!!ЗАМЕНИЛИ name на title, т.к. поле name - имя процесса задачи
    private String context;
    private String action;
    private String contacts;
    private Date date; //время задачи
    private boolean processed; // идентификатор выполнености. True- обработана, false - ожидает выполнения
    private final static long ID = 0;
    private final static String CONTEXT = "none";
    private final static String CONTACTS = "none";

    //методы изменения информации
    public void setTaskTitle(String newName){
        title=newName;
    }
    public void setContext(String newContext){
        context=newContext;
    }
    public void setContacts(String newContacts){
        contacts=newContacts;
    }

    @Override
    public void run()  { //!Поток задачи
        try{
            Date currectTime=new Date();
            long timeToSleep=this.date.getTime()-currectTime.getTime();
            Thread.sleep(timeToSleep);
            System.out.println(this.title);
            try {
                Runtime.getRuntime().exec(action);//To change body of overridden methods use File | Settings | File Templates.
                processed = true;
            } catch (IOException e) {
                JOptionPane.showMessageDialog(null, "Не удалось запустить "+ action);
            }
        } catch (InterruptedException ex) {
            this.interrupt();
        }
    }

    //методы получения информации
    public Date getDate(){
        return date;
    }
    public String getTaskTitle(){
        return title;
    }
    public String getContext(){
        return context;
    }
    public String getContacts(){
        return contacts;
    }
    public long getID(){
        return id;
    }
    public void setID(long id){
       this.id = id;
    }
    public boolean isProcessed(){
        return processed;
    }
    public void setProcessed(boolean processed){
        this.processed=processed;
    }
    //конструкторы с различными вариантами создания
    public Task(long id, String name,String action,String context,String contacts, Date d,boolean processed){
        this.id=id;
        this.title=name;
        this.action=action;
        this.contacts=contacts;
        this.context=context;
        this.date=d;
        this.processed=processed;
    }
    public Task(long id, String name,String action, Date d){
        this.id=id;
        this.title=name;
        this.date=d;
        this.action=action;
        contacts=CONTACTS;
        context=CONTEXT;
    }
    //Конструкторы без ID, так как ID будет присваиваться придобавлении в хранилище
    public Task( String name, String action, Date d){
        id=ID;
        this.title=name;
        this.date=d;
        this.action=action;
        contacts=CONTACTS;
        context=CONTEXT;
    }
    public Task( String name,String action,String context,String contacts, Date d){
        id=ID;
        this.title=name;
        this.contacts=contacts;
        this.context=context;
        this.date=d;
        this.action=action;
    }
    @Override
    public String toString() {
        return ""+id + " " + title + " " + context + " " + contacts +" "+date;    //To change body of overridden methods use File | Settings | File Templates.
    }
    public String getAction() {
        return action;
    }
    public void setAction(String action) {
        this.action = action;
    }
    public String getString(int index) {
        switch (index) {
            case 0:
                return ""+title;
            case 1:
                return ""+context;
            case 2:
                return ""+contacts;
            case 3:
                return ""+date;
            case 4:
                return ""+processed;
            default:
                return null;

        }
    }
}
